package com.hsc.offer;

import java.util.Stack;

/**
 * @author
 * @date 2025-06-13
 * @Description 5.用两个栈来实现一个队列，完成队列的Push和Pop操作。 队列中的元素为int类型。
 */
public class OfferTest {

    // 创建两个栈
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    /**
     * 模拟队列的入队操作
     *
     * @param node
     */
    public void push(int node) {
        // 将元素放入栈 中 先进后出 进入顺序为  123
        stack1.push(node);
    }

    /**
     * 模拟队列的出队操作
     *
     * @return
     */
    public int pop() {
        // 从栈中取出元素 取出元素为 321
        // 将栈1中的元素全部弹出，并压入栈2中
        while (!stack1.empty()) {
            // 此时 stack1 取出元素为 3 2 1 将元素压到栈2中 3为栈底 1为栈顶
            stack2.push(stack1.pop());
        }
        // 此时栈2 从底到顶为 3 2 1
        // 取出栈2的栈顶元素  完成队列的先进 先出 1 先进行 1 先出
        // 每次取一个 依次顺序为 1 2 3
        Integer result = stack2.pop();
        while (!stack2.empty()) {
            // 上面取了 了一个1 元素 还继续有 元素 2 3
            // 继续将 栈2的元素全部弹出，并压入栈1中
            stack1.push(stack2.pop());
        }
        return result;

    }


    public static void main(String[] args) {
        OfferTest offerTest = new OfferTest();
        offerTest.push(1);
        offerTest.push(2);
        offerTest.push(3);
        System.out.println(offerTest.pop());// 1
        System.out.println(offerTest.pop()); // 2
        System.out.println(offerTest.pop()); // 3
    }
}
